package com.ruoyi.common.core.controller;

import cn.hutool.core.bean.BeanUtil;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.domain.model.LoginUser;
import com.ruoyi.common.core.domain.model.WxGptUser;
import com.ruoyi.common.core.domain.model.WxUser;
import com.ruoyi.common.enums.UserType;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.helper.LoginHelper;
import com.ruoyi.common.utils.StringUtils;

/**
 * web层通用数据处理
 *
 * @author Lion Li
 */
public class BaseController {

    /**
     * 响应返回结果
     *
     * @param rows 影响行数
     * @return 操作结果
     */
    protected R<Void> toAjax(int rows) {
        return rows > 0 ? R.ok() : R.fail();
    }

    /**
     * 响应返回结果
     *
     * @param result 结果
     * @return 操作结果
     */
    protected R<Void> toAjax(boolean result) {
        return result ? R.ok() : R.fail();
    }

    /**
     * 页面跳转
     */
    public String redirect(String url) {
        return StringUtils.format("redirect:{}", url);
    }

    /**
     * 获取用户缓存信息
     */
    public LoginUser getLoginUser() {
        return LoginHelper.getLoginUser();
    }

    /**
     * 获取登录用户id
     */
    public Long getUserId() {
        return LoginHelper.getUserId();
    }

    /**
     * 获取登录部门id
     */
    public Long getDeptId() {
        return LoginHelper.getDeptId();
    }

    /**
     * 获取登录用户名
     */
    public String getUsername() {
        return LoginHelper.getUsername();
    }
    /**
     * 返回R封装
     */
    public <T> R<T> ok(){ return R.ok();}
    public <T> R<T> ok(T data){ return R.ok(data);}
    public <T> R<T> ok(String message){ return R.ok(message);}
    public <T> R<T> ok(String message,T data){ return R.ok(message,data);}

    public <T> R<T> fail(){ return R.fail();}
    public <T> R<T> fail(T data){ return R.fail(data);}
    public <T> R<T> fail(String message){ return R.fail(message);}
    public <T> R<T> fail(String message,T data){ return R.fail(message,data);}

    /**
     * 自定义code
     */
    public <T> R<T> fail(int code,String msg){ return R.fail(code, msg);}
    /**
     * 是否是管理员
     */
    public boolean isAdmin(){
        LoginUser loginUser = getLoginUser();
        WxUser wxUser = BeanUtil.toBean(loginUser, WxUser.class);
        return "1".equals(wxUser.getIdentity());
    }

    public void checkIsAdmin(){
        LoginUser loginUser = getLoginUser();
        WxUser wxUser = BeanUtil.toBean(loginUser, WxUser.class);
        if (!"1".equals(wxUser.getIdentity())){
           throw new ServiceException("权限不足");
        }

    }
    /**
     * 获取微信用户
     */
    public WxUser getWxUser(){
        LoginUser loginUser = getLoginUser();
        if(UserType.SYS_USER.getUserType().equals(loginUser.getUserType())){
            throw new ServiceException("pc端无法调用");
        }
        return BeanUtil.toBean(loginUser,WxUser.class);
    }
    /**
     * 获取微信Gpt用户
     */
    public WxGptUser getWxGptUser(){
        LoginUser loginUser = getLoginUser();
        if(UserType.SYS_USER.getUserType().equals(loginUser.getUserType())){
            throw new ServiceException("pc端无法调用");
        }
        return BeanUtil.toBean(loginUser,WxGptUser.class);
    }
}
